この本を見ながら進めてる↓
前回⇒「【Swift奮闘記ep17】ストラクチャ(ストラクチャの定義、できること、参照型と値型の違い、プロパティ・イニシャライザ)」
今回は列挙型について説明していく。
列挙型とは「同じグループに入るデータ(値)をまとめる」機能である。
例えば「東」、「西」、「南」、「北」のような値は「方位」というグループに分類することができる。
それをプログラミング上で管理できるのが列挙型だ。
列挙型はswitch文と相性がいいので、その辺も見ていこうと思う。
ではスタート!
列挙型の定義
enum 列挙型名 {
列挙型に持たせる機能
}
で定義することができる。
classとかstructの部分がenumに変わっただけね。
{ }の中には値以外にも以下のようなものも記述できる。
- プロパティの定義(計算型プロパティのみ)
- メソッドの定義
- サブスクリプトの定義
- イニシャライザの定義
- エクステンションによる機能拡張
- プロトコルへの準拠
なんだか前回のストラクチャと似ているが、プロパティについて計算型プロパティのみ定義が可能な点が違う。
計算型プロパティを忘れた人は「【Swift奮闘記ep10】第4章Swiftとオブジェクト指向プログラミング(型、クラス、プロパティの前半)」をチェック。
値の定義
では実際に列挙型を定義してみよう。
1 2 3 4 5 6 7 8 9 |
enum Compass { case north case south case east case west } var compass = Compass.north compass = .east // 型がすでに決まっている場合は"Compass"を省略できる。 |
クラスやストラクチャと同様に型推論が働いて変数宣言時に値を代入すると型が自動で決まる。
型が決まっていると、代入する時に型名を省略することができる。
(つまり今回は”Compass.east”とせずに”.east”でOKということ)
switch文を使ったマッチング
列挙型と相性がいいのはswitch文。
(switch文について復習する場合⇒「【Swift奮闘記ep5】演算子とか制御構文(条件分岐や繰り返し)とか」)
そもそもswitch文は列挙型を効率的に使えるような機能がついている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
enum Compass { case north case south case east case west } var compass = Compass.north switch compass { case .north: print("kita") case .south: print("minami") case .east: print("higashi") case .west: print("nishi") } |
〜〜〜の場合、○○○という処理を実行するという形になっている。
またswitch文の「すべてのパターンを網羅していなければいけない」というルールに注意して扱っていこう。(下記コードのようにdefaultにて対応する。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
enum Compass { case north case south case east case west } var compass = Compass.north switch compass { case .north: print("kita") default: print("kita igai") } |
northで”北”、defaultで”北以外”と表現してオッケーである。
列挙型についてはこれにて終了。
次回はプロトコル。こりゃやばいぜ・・・。
コメント